#version 300 es

layout(location=0)in vec4 verPosition;
layout(location=1)in vec4 verColor;
uniform mat4 traMatrix;//平移矩阵
uniform float scanRad;//视野弧度
uniform float aspect;//屏幕宽高比
uniform float far;//到远平面的距离，即焦点到视椎体远处的z分量值，必须是正值，且大于near
uniform float near;//到近平面的距离，即焦点到视椎体近处的z分量值，必须是正值
out vec4 renVerColor;

mat4 getPerspectiveMatrix(float scanRadian){
    float a=1.0/tan(scanRadian/2.0);
    mat4 perspectiveMatrix=mat4(
    a/aspect, 0.0, 0.0, 0.0,
    0.0, a, 0.0, 0.0,
    0.0, 0.0, -(far+near)/(far-near), -2.0*far*near/(far-near),
    0.0, 0.0, -1.0, 0.0);//透视矩阵，注意这里用的是左手坐标，所以矩阵第三行的两个影响z分量的值前面都取反
    return perspectiveMatrix;
}
mat4 getRotationXMatrix(float rotationAngle){
    float a=-radians(rotationAngle);//旋转角度转为弧度，然后取反
    mat4 rotationMatrix=mat4(
    1.0, 0.0, 0.0, 0.0,
    0.0, cos(a), -sin(a), 0.0,
    0.0, sin(a), cos(a), 0.0,
    0.0, 0.0, 0.0, 1.0);//绕x轴旋转
    return rotationMatrix;
}
void main() {
    mat4 perspectiveMatrix=getPerspectiveMatrix(scanRad);
    mat4 rotationMatrix=getRotationXMatrix(60.0);
    gl_Position=verPosition*(traMatrix+rotationMatrix)*perspectiveMatrix;
    gl_PointSize=10.0;
    renVerColor=verColor;
}
